<?php
	/** sous fonctionnalité de gestion d'une équipe
	 * @author Sebastian Mosser
	 */

class sfManagePresence extends aSubFeature {

	public function __construct() {
	  $this->_acl = new AccessControlList(); 
      $this->_acl->setGranted(1, AccessControlList::$JUST_ME); // Entraineur
      $this->_acl->setGranted(2); // Recrutement
      $this->_acl->setGranted(3); // Secretariat
      $this->_acl->setGranted(7); // SysAdmin
		}
		
	public function check() {
	
		$teamId = PropRetriever::getProp($_POST,"teamId");
		$perm = $this->_acl->isExposable(Login::getGroups());
		
		try {
			$aTeam = Team::read($teamId);
		}
		catch(Exception $e) {
			$page = "<h1>Une erreur fatale est survenue ! </h1><br /> <br />"; 
			$page .= "<div align=\"center\"> <span class=\"error\">";
			$page .= 
					"L'équipe d'identifiant Balloon <code>[$teamId]</code> n'éxiste pas!";
			return $page;
		}

		if ($perm == AccessControlList::$JUST_ME) {
			if (! $aTeam->canEdit(Login::getLoginId())) {
				$page = <<<EOS
<h1> Une erreur est survenue ! </h1>
<div align="center">
<p> <span class="error">Vous n'êtes pas autorisé a faire des modifications dans cette équipe car vous n'en êtes pas l'administrateur.</span></p>
</div>
<p> Si vous pensez qu'il s'agit d'une erreur, contactez le secrétariat du club qui pourra vous autoriser à y acceder.</p>
<p> Pour pouvoir modifier une équipe, vous devez être déclaré : 
<ul>
  <li> Administrateur de l'équipe </li>
  <li> Administrateur de catégorie </li>
  <li> Membre du groupe <code> Secretariat </li>
  <li> Membre du groupe <code> Recrutement </code> </li>
  <li> Membre du groupe <code> Administrateur Système </code> </li>
</ul>
EOS;
				return $page;
			}
			
		}
		return True;
	
	}
	
	protected function run() {
		// Test d'accès		
		$test = $this->check();
		if ($test !== True)
			return $test;
		$id = PropRetriever::getProp($_POST,"id");	
		$teamId = PropRetriever::getProp($_POST,"teamId");	
		$aTeam = Team::read($teamId);		
		switch (PropRetriever::getProp($_POST,"action")) {
			case "add":
				return ($this->addPresence($aTeam) . $this->displayForm($aTeam) . $this->displayPresence($aTeam) . $this->displayAbsence($aTeam));
			case "delete":
				return ($this->deletePresence($aTeam) . $this->displayForm($aTeam) . $this->displayPresence($aTeam) . $this->displayAbsence($aTeam));
			default:
				return ($this->displayForm($aTeam) . $this->displayPresence($aTeam) . $this->displayAbsence($aTeam));	
		}
	}
	
	private function addPresence($aTeam, $errors = "") {
		$teamId = PropRetriever::getProp($_POST,"teamId");
		$date = PropRetriever::getProp($_POST,"date");
		$ser= serialize($_POST);
		
		$errors = array();
		if ($date == "")
			$errors["date"] = "Veuillez entrer la date à laquelle l'entraînement a été effectué !";
			else if (! Date::isValidDate($date))
				$errors["date"] = "La date n'est pas valide !";

		// Il y a des erreurs : 
		if (count($errors) != 0) {
			$licenceStyle = "class=\"error\"";
			$errorsText  = "<h2> Une erreur est survenue </h2>";
			$errorsText .= "<div align=\"center\"><span class=\"error\">";
			$errorsText .= $errors["date"] . "</span> </div>";
			return $errorsText;
		} else {
			// construction de la requête
			$query = <<<EOS
INSERT INTO `team_presence` VALUES 
('', '$teamId', '$date', '$ser'); 
EOS;

		// Injection de la requête dans le moteur de base :
		$myDb = Database::getSingleton();
		$ans = $myDb->executeInsert($query);
	   
		// Mise a jour de la clé identifiante
		$this->_id = $ans[0];
		
		$page = <<<EOS
<h2> Ajout effectué avec succès ! </h2>
EOS;
		return $page;
		}	
	}

	private function deletePresence($aTeam, $errors = "") {
		$id = PropRetriever::getProp($_POST,"id");
		
		$query = <<<EOS
DELETE FROM `team_presence` 
WHERE `id` = $id;
EOS;

		// Injection de la requête dans le moteur de base :
		$myDb = Database::getSingleton();
		$ans = $myDb->executeInsert($query);
	   
		
		$page = <<<EOS
<h2> Entrée supprimée ! </h2>
EOS;
		return $page;
	}
	

	private function displayForm($aTeam) {
		$teamId = PropRetriever::getProp($_POST,"teamId");
    
		$page = "";
		$teamName = $aTeam->displayShort();

		$page = "<h1> Gestion des présences aux entraînements de l'équipe $teamName </h1>";
		$page .= fManageTeams::getReturnButton($teamId);

		return $page;
	}
	
	private function displayPresence($aTeam) {
		$teamId    = PropRetriever::getProp($_POST,"teamId");		
		$page = "<h1> 5 derniers Entraînements </h1>";
		
		$players = $aTeam->getPlayers();
		if (count($players) == 0) {
			$page .= <<<EOS
<div align="center">
  <p>
    <span class="error"> 
      Aucun joueur présent actuellement dans l'équipe ! 
		</span> 
	</p>
</div> 
EOS;
		} else {
			$header  = "<div align=\"center\"><table class=\"resultset\">";
			$header .= "<tr> <th> Nom </th>";
			$myDb = Database::getSingleton();
			$sql = $myDb->execute("SELECT `date` FROM `team_presence` WHERE `team_id` = $teamId ORDER BY date DESC LIMIT 0, 5");
			while ($ans = mysql_fetch_array($sql)) {
				$date = Date::fromSql($ans["date"])->lightPrint();
				$header .= "<th> $date </th>";
			}
			$header .= '<form method="post">';
			$header .= '<input type="hidden" name="teamId" value="'. $teamId .'" >';
			$header .= '<input type="hidden" name="action" value="add" >';
			$header .= '<th><input type="text" name="date" id="date" class="edit" value="Nouvelle Date" 
										onclick="javascript:displayBalloonCal(\'date\')" /><br />
						P &nbsp;&nbsp; A &nbsp;&nbsp; M &nbsp;&nbsp; B<br />';
			$header .= "<input type=\"submit\" class=\"edit\" value=\"Ajouter\" /></th></tr>";
			$footer = "</table> </div>";
			$content = "";
			
			foreach ($players as $k => $v) {
				$aPlayer = Member::read($k);
				$name = $aPlayer->displayName();
				$content .= "<tr><td>$name</td>";
				$tableFooter = "<tr> <td> &nbsp; </td>";
				$myDb = Database::getSingleton();
				$sql = $myDb->execute("SELECT * FROM `team_presence` WHERE `team_id` = $teamId ORDER BY date DESC LIMIT 0, 5");
				while ($ans = mysql_fetch_array($sql)) {
					$content .= "<td>";
					$id = $ans["id"];
					
					$presence1 = $ans['presence'];
					$presence = unserialize($presence1);
					foreach ($presence as $cle=>$element) {
						if ($cle == $k) {
							$content .= $element;
						}
					}
					$content .= "</td>";
					$tableFooter .= '<td><form method="post">';
					$tableFooter .= '<input type="hidden" name="id" value="'. $id .'" >';
					$tableFooter .= '<input type="hidden" name="teamId" value="'. $teamId .'" >';
					$tableFooter .= '<input type="hidden" name="action" value="delete" >';
					$tableFooter .= "<input type=\"submit\" class=\"edit\" value=\"Supprimer\" /></form></td>";
				}
				$content .= '<td> 	<input type="radio" name="' . $k .'" value="Present" checked="checked" />
									<input type="radio" name="' . $k .'" value="Absent" />
									<input type="radio" name="' . $k .'" value="Malade" />
									<input type="radio" name="' . $k .'" value="Blesse" /> </td>';
				$content .= "</tr>";
				$tableFooter .= "<td></td></tr>";
			}
			$content .= "</form>";
			$page .= $header . $content . $tableFooter . $footer;
		}
		return $page;
	}
		
	private function displayAbsence($aTeam) {
		$teamId    = PropRetriever::getProp($_POST,"teamId");		
		$players = $aTeam->getPlayers();	
		$page = "<h1> Absences détaillées </h1>";
			
		foreach ($players as $k => $v) {
			$aPlayer = Member::read($k);
			$name = $aPlayer->displayName();
			$abs = 0;
			$tra = 0;
			$page .= "<b>" . $name . "</b><br />";			
			$myDb = Database::getSingleton();
			$sql = $myDb->execute("SELECT * FROM `team_presence` WHERE `team_id` = $teamId ORDER BY date ASC");
			while ($ans = mysql_fetch_array($sql)) {
				$date = Date::fromSql($ans["date"])->lightPrint();
				$presence1 = $ans['presence'];
				$presence = unserialize($presence1);
				foreach ($presence as $cle=>$element) {
					if ($cle == $k) {
						$tra++;
						if ($element != "Present") {
							$page .= $date . " : " . $element . "<br />";
							$abs++;
						}
					}
				}
			}
			if ($abs == 0) {
				$page .= "Aucune absence sur <b>" . $tra ."</b> entraînement(s)<br />";
			} else {
				$pre = $tra - $abs;
				$page .= "<b>" . $pre . "</b> présence(s) sur <b>" . $tra ."</b> entraînement(s)<br />";
			}
			$page .= "<br />";
		}	
		return $page;
	}
}
?>